本日進度:
去翻 git log
,發現最下面有個 Author 長的一副 flag 的格式,然後試一下就對了 噎
就用 nc
連上之後依序回答問題就可以得到 flag 了
把載下來的東西印出來看起來就是 base64 過的東西,但解過一次之後還是亂的,看起來又是個 base64,所以就再解,因為覺得這樣太累了,所以就寫了個 python 去解,然後就得到 flag 了~
import base64
text = '''VmpGU1EyRXlUWGxTYmxKVVYwZFNWbGxyV21GV1JteDBUbFpPYWxKdFVsaFpWVlUxWVZaS1ZWWnVh
RmRXZWtab1dWWmtSMk5yTlZWWApiVVpUVm10d1VWZFdVa2RpYlZaWFZtNVdVZ3BpU0VKeldWUkNk
MlZXVlhoWGJYQk9VbFJXU0ZkcVRuTldaM0JZVWpGS2VWWkdaSGRXCk1sWnpWV3hhVm1KRk5XOVVW
VkpEVGxaYVdFMVhSbFZrTTBKVVZXcE9VazFXV2toT1dHUllDbUY2UWpSWk1GWlhWa2RHZEdWRlZs
aGkKYlRrelZERldUMkpzUWxWTlJYTkxDZz09Cg=='''
while True:
print(text)
text = base64.b64decode(text).decode('utf-8').replace('\n', '')
解壓縮他給的檔案後,資料夾中裡面有超多的檔案,所以就用 grep
來配對 picoCTF{.*}
,然後就找到 flag 了~
使用 find
指令,找到名為 uber-secret.txt
的檔案,印出來就是 flag 了
有點太簡單,就是直接 Run 就印出來了 \owo/
發現輸入 snickerdoodle
會出現 That is cookie! Not very special though...
,並且這時去查看 cookie 會發現有一個 name
的索引為 0
,但是在一般的時候 name
是 -1
,然後如果改成 1, 2, 3...
會有不同回應,所以就寫一個程式去窮舉看看,就像下面那樣,最後就發現在 name
為 18
的時候會出現 flag
import requests
import threading
url = 'http://mercury.picoctf.net:54219/check'
cookie = {"name": "1"}
def try_cookie(i):
cookie["name"] = str(i)
r = requests.get(url, cookies=cookie, allow_redirects=False)
# print("trying:" + str(i), r.status_code)
if r.status_code == 200 and "picoCTF" in r.text:
print("trying:" + str(i), r.text)
print(r.text)
for i in range(1000):
threading.Thread(target=try_cookie, args=(i,)).start()
pwn : 就是去找 Binary 檔的漏洞
基本語法
io = pwn.process("cmd.exe")
: 跟一個程序互動 (這裡是 cmd.exe)io = pwn.remote("host", port)
: 跟遠端主機互動io.interactive()
: 進入互動模式io
這個物件創出來之後,後面就都是用 io
來與 程序
或是 遠端主機
互動io.send("whoami\n")
: 送出指令io.sendline("whoami")
: 送出指令並且加上換行io.recv(1024, timeout=1)
: 接收回傳,第一個參數是接收的大小 (byte),第二個參數是 timeout (最多等待多久)io.recvline()
: 接收回傳並且換行io.recvuntil("end")
: 接收回傳直到遇到 end
io.recvlines(2)
: 接收回傳兩行就是根據遠端主機的提示,將一模一樣的文字傳回去,然後就會出現 flag,但因為主機已經關了,所以我就只有寫好程式,但應該是會對的啦 owo
import pwn
io = pwn.remote('140.116.246.190', 8787)
while True:
try:
io.recvuntil('Repeat after me:\n')
echo = io.recv()
print(echo)
io.send(echo)
except:
break
io.interactive()
跟 echo 很像,但變成算 1000 道數學題,都算對之後就會給 Flag 了,然後跟上一題一樣,主機已經關了,所以我就只有寫程式,沒有實際測過
import pwn
io = pwn.remote("140.116.246.190", 8788)
while True:
try:
io.recvuntil("Solve the problem: ")
question = io.recv()
ans = eval(question)
print(question.decode(), ans)
io.sendline(str(ans))
except:
break
io.interactive()
這邊聽不是很懂,有大概理解它的原理就是要把 stack 塞爆,一路塞到 return addr 的位置,這邊的題目是要跳到 win
的地方,然後就會出現 flag,但我其實不太知道實作細節,所以目前就先不寫他了,之後便更強了再說 (主要是今天死線快到了,來不及研究 lol)